package com.shujia.jdbc;

import com.alibaba.druid.pool.DruidDataSource;
import org.junit.Before;
import org.junit.Test;

import javax.sql.DataSource;
import java.io.InputStream;
import java.sql.*;
import java.util.Properties;

public class JdbcDemo2 {




    /*
    模拟转账操作
    需要使用connection开启, 提交, 回滚事务
    使用ThreadLocal改进代码
     */
    @Test
    public void transfer() throws Exception {
        int srcId = 1;
        int targetId = 2;
        int money = 500;

        Connection connection = JdbcUtil.getConnection();

        try {
            // 减去转出账号
            String sql = "update t_account set balance = balance + ? where id = ?";

            // 获取本次会还的连接

            // 开启事务
            connection.setAutoCommit(false);

            // 保存到线程本地变量中
            JdbcUtil.threadLocal.set(connection);
            JdbcUtil.changeRecordSafe(sql, -money, srcId);

            // 代码发生了异常
            System.out.println(1 / 0);

            // 增加转入账号
            JdbcUtil.changeRecordSafe(sql, money, targetId);

            // 提交事务
            connection.commit();
        } catch (Exception e) {
            e.printStackTrace();
            // 回滚事务
            JdbcUtil.threadLocal.get().rollback();
        } finally {
            connection.close();
        }

    }





}
